# Introduction:
Department

Here are preliminary results of the bibliometric mapping of the 2022 Luxembourg research evaluation. Its purpose is:

The method for the research-field-mapping can be reiviewed here:

Rakas, M., & Hain, D. S. (2019). The state of innovation system research: What happens beneath the surface?. Research Policy, 48(9), 103787.

Seed Articles

The seed articles deemed representative for the active areas of research in the institution, and include authors affiliated with the institution. They can be selected in three ways:

  1. Via bibliographic clustering of the institutions publications and selection of most central articles per cluster (only clsuters where n >= 0.05N). Selection can be found at:https://github.com/daniel-hain/biblio_lux_2022/blob/master/output/seed/scopus_list_mrt_seed.csv
  2. MAnual selection of relevant publications.
  3. A combination of 1. and 2.

The present analysis is based on the following seed articles:

AU PY TI JI
BENGASI G;DESPORT JS;BABA K… 2020 MOLECULAR FLATTENING EFFECT TO ENHANCE THE CONDUCTIVITY OF FUSED PORPHYRIN TAPE THIN FILMS RSC ADV.
ZHAO HJ;ÍÑIGUEZ J 2019 CREATING MULTIFERROIC AND CONDUCTIVE DOMAIN WALLS IN COMMON FERROELASTIC COMPOUNDS NPJ COMPUTATIONAL MATER.
CHEN P;GRISOLIA MN;ZHAO HJ;… 2018 ENERGETICS OF OXYGEN-OCTAHEDRA ROTATIONS IN PEROVSKITE OXIDES FROM FIRST PRINCIPLES PHYS. REV. B
GIUNTA G;DE PIETRO G;NASSER… 2016 A THERMAL STRESS FINITE ELEMENT ANALYSIS OF BEAM STRUCTURES BY HIERARCHICAL MODELLING COMPOS PART B: ENG

Topic modelling

Here, we report the results of a LDA topic-modelling (basically, clustering on words) on all title+abstract texts.

Topics by topwords

Note: While this static vies is helpful, I recommend using the interactive LDAVis version to be found under https://daniel-hain.github.io/biblio_lux_2022/output/topic_modelling/LDAviz_list_mrt.rds/index.html#topic=1&lambda=0.60&term=. For functionality and usage, see technical description in the next tab.

Topics over time

Technical Description

LDA Topic Modelling

Topic modeling is a type of statistical modeling for discovering the abstract “topics” that occur in a collection of documents. Latent Dirichlet Allocation (LDA) is an example of topic model and is used to classify text in a document to a particular topic.

LDA is a generative probabilistic model that assumes each topic is a mixture over an underlying set of words, and each document is a mixture of over a set of topic probabilities. It builds a topic per document model and words per topic model, modeled as Dirichlet distributions.

LDAVis

LDAvis is a web-based interactive visualisation of topics estimated using LDA. It provides a global view of the topics (and how they differ from each other), while at the same time allowing for a deep inspection of the terms most highly associated with each individual topic. The package extracts information from a fitted LDA topic model to inform an interactive web-based visualization. The visualisation has two basic pieces.

The left panel visualise the topics as circles in the two-dimensional plane whose centres are determined by computing the Jensen–Shannon divergence between topics, and then by using multidimensional scaling to project the inter-topic distances onto two dimensions. Each topic’s overall prevalence is encoded using the areas of the circles.

The right panel depicts a horizontal bar chart whose bars represent the individual terms that are the most useful for interpreting the currently selected topic on the left. A pair of overlaid bars represent both the corpus-wide frequency of a given term as well as the topic-specific frequency of the term.

The \(\lambda\) slider allows to rank the terms according to term relevance. By default, the terms of a topic are ranked in decreasing order according their topic-specific probability ( \(\lambda\) = 1 ). Moving the slider allows to adjust the rank of terms based on much discriminatory (or “relevant”) are for the specific topic. The suggested optimal value of \(\lambda\) is 0.6.

Knowledge Bases: Co-Citation network analysis

Note: This analysis refers the co-citation analysis, where the cited references and not the original publications are the unit of analysis. See tab Technical descriptionfor additional explanations

Knowledge Bases summary

In order to partition networks into components or clusters, we deploy a community detection technique based on the Lovain Algorithm (Blondel et al., 2008). The Lovain Algorithm is a heuristic method that attempts to optimize the modularity of communities within a network by maximizing within- and minimizing between-community connectivity. We identify the following communities = knowledge bases.

com name dgr_int dgr
Knowledge Base 1: KB 1 (n = 1821, density =4.6)
1 KRESSE G. FURTHMÜLLER J. (1996) 10244 10264
1 KRESSE G. JOUBERT D. (1999) 9931 9955
1 BLÖCHL P.E. (1994) 8758 8780
1 PERDEW J.P. BURKE K. ERNZERHOF M. (1996) 7380 7440
1 PERDEW J.P. RUZSINSZKY A. CSONKA G.I. VYDROV O.A. SCUSERIA G.E. CONSTANTIN L.A. ZHOU X. BURKE K. (2008) 3878 3888
1 DUDAREV S.L. BOTTON G.A. SAVRASOV S.Y. HUMPHREYS C.J. SUTTON A.P. (1998) 3694 3697
1 KRESSE G. HAFNER J. (1993) 3658 3658
1 MOMMA K. IZUMI F. (2011) 3166 3169
1 MONKHORST H.J. PACK J.D. (1976) 3011 3017
1 HOHENBERG P. KOHN W. (1964) 2855 2872
Knowledge Base 2: KB 2 (n = 1218, density =6.35)
2 BLÖCHL P.E. PROJECTOR AUGMENTED-WAVE METHOD (1994) 7255 7312
2 KRESSE G. JOUBERT D. FROM ULTRASOFT PSEUDOPOTENTIALS TO THE PROJECTOR AUGMENTED-WAVE METHOD (1999) 7187 7236
2 KRESSE G. FURTHMÜLLER J. EFFICIENT ITERATIVE SCHEMES FOR AB INITIO TOTAL-ENERGY CALCULATIONS USING A PLANE-WAVE BASIS SET (1996) 6661 6709
2 PERDEW J.P. BURKE K. ERNZERHOF M. GENERALIZED GRADIENT APPROXIMATION MADE SIMPLE (1996) 5640 5744
2 KRESSE G. FURTHMÜLLER J. EFFICIENCY OF AB-INITIO TOTAL ENERGY CALCULATIONS FOR METALS AND SEMICONDUCTORS USING A PLANE-WAVE BASIS SET (1996) 2882 2898
2 KRESSE G. HAFNER J. AB INITIO MOLECULAR DYNAMICS FOR LIQUID METALS (1993) 2297 2303
2 MONKHORST H.J. PACK J.D. SPECIAL POINTS FOR BRILLOUIN-ZONE INTEGRATIONS (1976) 2187 2193
2 MOMMA K. IZUMI F. VESTA 3 FOR THREE-DIMENSIONAL VISUALIZATION OF CRYSTAL VOLUMETRIC AND MORPHOLOGY DATA (2011) 2125 2138
2 KOHN W. SHAM L.J. SELF-CONSISTENT EQUATIONS INCLUDING EXCHANGE AND CORRELATION EFFECTS (1965) 1986 1993
2 DUDAREV S.L. BOTTON G.A. SAVRASOV S.Y. HUMPHREYS C.J. SUTTON A.P. ELECTRON-ENERGY-LOSS SPECTRA AND THE STRUCTURAL STABILITY OF NICKEL OXIDE: AN LSD… 1865 1872
Knowledge Base 3: KB 3 (n = 739, density =9.47)
3 CARRERA E. THEORIES AND FINITE ELEMENTS FOR MULTILAYERED PLATES AND SHELLS: A UNIFIED COMPACT FORMULATION WITH NUMERICAL ASSESSMENT AND BENCHMARKIN… 2194 2194
3 CARRERA E. THEORIES AND FINITE ELEMENTS FOR MULTILAYERED ANISOTROPIC COMPOSITE PLATES AND SHELLS (2002) 1176 1176
3 CARRERA E. PETROLO M. REFINED BEAM ELEMENTS WITH ONLY DISPLACEMENT VARIABLES AND PLATE/SHELL CAPABILITIES (2012) 899 899
3 CARRERA E. CINEFRA M. PETROLO M. ZAPPINO E. FINITE ELEMENT ANALYSIS OF STRUCTURES THROUGH UNIFIED FORMULATION (2014) 787 787
3 CARRERA E. GIUNTA G. PETROLO M. (2011) 785 785
3 CARRERA E. HISTORICAL REVIEW OF ZIG-ZAG THEORIES FOR MULTILAYERED PLATES AND SHELLS (2003) 633 633
3 CARRERA E. GIUNTA G. NALI P. PETROLO M. REFINED BEAM ELEMENTS WITH ARBITRARY CROSS-SECTION GEOMETRIES (2010) 620 620
3 CARRERA E. GIUNTA G. PETROLO M. BEAM STRUCTURES: CLASSICAL AND ADVANCED THEORIES (2011) 608 608
3 CARRERA E. CINEFRA M. PETROLO M. ZAPPINO E. (2014) 585 585
3 REISSNER E. THE EFFECT OF TRANSVERSE SHEAR DEFORMATION ON THE BENDING OF ELASTIC PLATES (1945) 578 578
Knowledge Base 4: KB 4 (n = 583, density =6.53)
4 TANAKA T. OSUKA A. (2015) 770 815
4 ETHIRAJAN M. CHEN Y. JOSHI P. PANDEY R.K. (2011) 759 851
4 TSUDA A. OSUKA A. (2001) 742 758
4 MORI H. TANAKA T. OSUKA A. (2013) 629 641
4 LEWTAK J.P. GRYKO D.T. (2012) 516 522
4 GRZYBOWSKI M. SKONIECZNY K. BUTENSCHÖN H. GRYKO D.T. (2013) 395 395
4 ARATANI N. KIM D. OSUKA A. (2009) 362 368
4 FOX S. BOYLE R.W. (2006) 345 345
4 DAVIS N.K.S. THOMPSON A.L. ANDERSON H.L. (2011) 328 334
4 ANDERSON H.L. (1999) 316 343
Knowledge Base 5: KB 5 (n = 466, density =15.06)
5 O’REGAN B. GRÄTZEL M. (1991) 1366 1378
5 HIGASHINO T. IMAHORI H. (2015) 1256 1311
5 HAGFELDT A. BOSCHLOO G. SUN L. KLOO L. PETTERSSON H. (2010) 1225 1231
5 MATHEW S. YELLA A. GAO P. HUMPHRY-BAKER R. CURCHOD B.F.E. ASHARI-ASTANI N. TAVERNELLI I. GRÄTZEL M. (2014) 1115 1219
5 LI L.-L. DIAU E.W.-G. (2013) 1067 1230
5 URBANI M. GRÄTZEL M. NAZEERUDDIN M.K. TORRES T. (2014) 1058 1115
5 IMAHORI H. UMEYAMA T. ITO S. (2009) 975 991
5 YELLA A. LEE H.-W. TSAO H.N. YI C. CHANDIRAN A.K. NAZEERUDDIN M.K. DIAU E.W.-G. GRÄTZEL M. (2011) 867 889
5 YELLA A. MAI C.-L. ZAKEERUDDIN S.M. CHANG S.-N. HSIEH C.-H. YEH C.-Y. GRÄTZEL M. (2014) 624 627
5 MISHRA A. FISCHER M.K.R. BÄUERLE P. (2009) 465 465
Knowledge Base 6: KB 6 (n = 443, density =7.8)
6 LI L.-L. DIAU E.W.-G. PORPHYRIN-SENSITIZED SOLAR CELLS (2013) 729 741
6 HAGFELDT A. BOSCHLOO G. SUN L. KLOO L. PETTERSSON H. DYE-SENSITIZED SOLAR CELLS (2010) 662 670
6 URBANI M. GRÄTZEL M. NAZEERUDDIN M.K. TORRES T. MESO-SUBSTITUTED PORPHYRINS FOR DYE-SENSITIZED SOLAR CELLS (2014) 615 619
6 MATHEW S. YELLA A. GAO P. HUMPHRY-BAKER R. CURCHOD B.F.E. ASHARI-ASTANI N. TAVERNELLI I. GRÄTZEL M. DYE-SENSITIZED SOLAR CELLS WITH 13% EFFICIENCY … 592 597
6 O’REGAN B. GRÄTZEL M. A LOW-COST HIGH-EFFICIENCY SOLAR CELL BASED ON DYE-SENSITIZED COLLOIDAL TIO2 FILMS (1991) 523 531
6 ETHIRAJAN M. CHEN Y. JOSHI P. PANDEY R.K. THE ROLE OF PORPHYRIN CHEMISTRY IN TUMOR IMAGING AND PHOTODYNAMIC THERAPY (2011) 503 507
6 HIGASHINO T. IMAHORI H. PORPHYRINS AS EXCELLENT DYES FOR DYE-SENSITIZED SOLAR CELLS: RECENT DEVELOPMENTS AND INSIGHTS (2015) 472 472
6 YELLA A. LEE H.-W. TSAO H.N. YI C. CHANDIRAN A.K. NAZEERUDDIN M.K. DIAU E.W.-G. GRÄTZEL M. PORPHYRIN-SENSITIZED SOLAR CELLS WITH COBALT (II/III) 337 337
6 YAO Z. ZHANG M. WU H. YANG L. LI R. WANG P. DONOR/ACCEPTOR INDENOPERYLENE DYE FOR HIGHLY EFFICIENT ORGANIC DYE-SENSITIZED SOLAR CELLS (2015) 226 226
6 SONG H. LIU Q. XIE Y. PORPHYRIN-SENSITIZED SOLAR CELLS: SYSTEMATIC MOLECULAR OPTIMIZATION COADSORPTION AND COSENSITIZATION (2018) 193 196

Development of Knowledge Bases

Technical description

In a co-cittion network, the strength of the relationship between a reference pair \(m\) and \(n\) (\(s_{m,n}^{coc}\)) is expressed by the number of publications \(C\) which are jointly citing reference \(m\) and \(n\).

\[s_{m,n}^{coc} = \sum_i c_{i,m} c_{i,n}\]

The intuition here is that references which are frequently cited together are likely to share commonalities in theory, topic, methodology, or context. It can be interpreted as a measure of similarity as evaluated by other researchers that decide to jointly cite both references. Because the publication process is time-consuming, co-citation is a backward-looking measure, which is appropriate to map the relationship between core literature of a field.

Research Areas: Bibliographic coupling analysis

Research Areas main summary

This is arguably the more interesting part. Here, we identify the literature’s current knowledge frontier by carrying out a bibliographic coupling analysis of the publications in our corpus. This measure uses bibliographical information of publications to establish a similarity relationship between them. Again, method details to be found in the tab Technical description. As you will see, we identify the main research area, but also a set of adjacent research areas with some theoretical/methodological/application overlap.

To identify communities in the field’s knowledge frontier (labeled research areas) we again use the Lovain Algorithm (Blondel et al., 2008). We identify the following communities = research areas.

com_name AU PY TI dgr_int TC TC_year
Research Area 1: RA 1 (n = 1140, density =2.1)
RA 1 WANG Z;GRESCH D;SOLUYA… 2016 MOTE2: A TYPE-II WEYL TOPOLOGICAL METAL 32.6758154 318 53.000000
RA 1 HINUMA Y;PIZZI G;KUMAG… 2017 BAND STRUCTURE DIAGRAM PATHS BASED ON CRYSTALLOGRAPHY 39.9129643 256 51.200000
RA 1 OTROKOV MM;RUSINOV IP;… 2019 UNIQUE THICKNESS-DEPENDENT PROPERTIES OF THE VAN DER WAALS INTERLAYER ANTIFERROMAGNET MNBI2TE4 FILMS 31.1020458 235 78.333333
RA 1 QIAO J;NING L;MOLOKEEV… 2018 EU2+ SITE PREFERENCES IN THE MIXED CATION K2BACA(PO4)2 AND THERMALLY STABLE LUMINESCENCE 24.0019278 302 75.500000
RA 1 LEE J;SEKO A;SHITARA K… 2016 PREDICTION MODEL OF BAND GAP FOR INORGANIC COMPOUNDS BY COMBINATION OF DENSITY FUNCTIONAL THEORY CALCULATIONS AND MACHINE … 38.7317584 185 30.833333
RA 1 STEINER S;KHMELEVSKYI … 2016 CALCULATION OF THE MAGNETIC ANISOTROPY WITH PROJECTED-AUGMENTED-WAVE METHODOLOGY AND THE CASE STUDY OF DISORDERED FE1-XCOX… 37.4671718 189 31.500000
RA 1 KYRTSOS A;MATSUBARA M;… 2018 ON THE FEASIBILITY OF P-TYPE GA2O3 40.8406776 151 37.750000
RA 1 MORIWAKE H;KUWABARA A;… 2017 WHY IS SODIUM-INTERCALATED GRAPHITE UNSTABLE? 44.9982805 125 25.000000
RA 1 YORULMAZ U;ÖZDEN A;PER… 2016 VIBRATIONAL AND MECHANICAL PROPERTIES OF SINGLE LAYER MXENE STRUCTURES: A FIRST-PRINCIPLES INVESTIGATION 40.5999635 138 23.000000
RA 1 SEKO A;HAYASHI H;NAKAY… 2017 REPRESENTATION OF COMPOUNDS FOR MACHINE-LEARNING PREDICTION OF PHYSICAL PROPERTIES 34.4883044 151 30.200000
Research Area 2: RA 2 (n = 999, density =2.05)
RA 2 VAN SETTEN MJ;GIANTOMA… 2018 THE PSEUDODOJO: TRAINING AND GRADING A 85 ELEMENT OPTIMIZED NORM-CONSERVING PSEUDOPOTENTIAL TABLE 18.6764871 437 109.250000
RA 2 DING W;ZHU J;WANG Z;GA… 2017 PREDICTION OF INTRINSIC TWO-DIMENSIONAL FERROELECTRICS IN IN 2 SE 3 AND OTHER III 2 -VI 3 VAN DER WAALS MATERIALS 16.1845065 439 87.800000
RA 2 JI D;CAI S;PAUDEL TR;S… 2019 FREESTANDING CRYSTALLINE OXIDE PEROVSKITES DOWN TO THE MONOLAYER LIMIT 26.6533781 191 63.666667
RA 2 LEE J-H;BRISTOWE NC;LE… 2016 RESOLVING THE PHYSICAL ORIGIN OF OCTAHEDRAL TILTING IN HALIDE PEROVSKITES 29.0855016 155 25.833333
RA 2 SEIXAS L;RODIN AS;CARV… 2016 MULTIFERROIC TWO-DIMENSIONAL MATERIALS 31.2168023 138 23.000000
RA 2 KIM TH;PUGGIONI D;YUAN… 2016 POLAR METALS BY GEOMETRIC DESIGN 19.2032497 206 34.333333
RA 2 TIAN S;ZHANG J-F;LI C;… 2019 FERROMAGNETIC VAN DER WAALS CRYSTAL VI3 42.5701445 90 30.000000
RA 2 ZHAO M;XIA Z;HUANG X;N… 2019 LI SUBSTITUENT TUNING OF LED PHOSPHORS WITH ENHANCED EFFICIENCY, TUNABLE PHOTOLUMINESCENCE, AND IMPROVED THERMAL STABILITY 29.1937022 121 40.333333
RA 2 YE W;CHEN C;WANG Z;CHU… 2018 DEEP NEURAL NETWORKS FOR ACCURATE PREDICTIONS OF CRYSTAL STABILITY 24.0021775 130 32.500000
RA 2 BEECHER AN;SEMONIN OE;… 2016 DIRECT OBSERVATION OF DYNAMIC SYMMETRY BREAKING ABOVE ROOM TEMPERATURE IN METHYLAMMONIUM LEAD IODIDE PEROVSKITE 17.0375223 173 28.833333
Research Area 3: RA 3 (n = 477, density =0.41)
RA 3 PAGANI A;DE MIGUEL AG;… 2016 ANALYSIS OF LAMINATED BEAMS VIA UNIFIED FORMULATION AND LEGENDRE POLYNOMIAL EXPANSIONS 7.1534837 77 12.833333
RA 3 PAGANI A;CARRERA E 2017 LARGE-DEFLECTION AND POST-BUCKLING ANALYSES OF LAMINATED COMPOSITE BEAMS BY CARRERA UNIFIED FORMULATION 3.0918162 109 21.800000
RA 3 PAGANI A;CARRERA E 2018 UNIFIED FORMULATION OF GEOMETRICALLY NONLINEAR REFINED BEAM THEORIES 3.0823137 97 24.250000
RA 3 CARRERA E;DE MIGUEL AG… 2017 HIERARCHICAL THEORIES OF STRUCTURES BASED ON LEGENDRE POLYNOMIAL EXPANSIONS WITH FINITE ELEMENT APPLICATIONS 6.0912697 49 9.800000
RA 3 NEJAD MZ;HADI A 2016 NON-LOCAL ANALYSIS OF FREE VIBRATION OF BI-DIRECTIONAL FUNCTIONALLY GRADED EULER-BERNOULLI NANO-BEAMS 1.6356711 169 28.166667
RA 3 NEJAD MZ;HADI A;RASTGOO A 2016 BUCKLING ANALYSIS OF ARBITRARY TWO-DIRECTIONAL FUNCTIONALLY GRADED EULER-BERNOULLI NANO-BEAMS BASED ON NONLOCAL ELASTICITY… 1.1727529 220 36.666667
RA 3 DAN M;PAGANI A;CARRERA E 2016 FREE VIBRATION ANALYSIS OF SIMPLY SUPPORTED BEAMS WITH SOLID AND THIN-WALLED CROSS-SECTIONS USING HIGHER-ORDER THEORIES BA… 7.5675455 34 5.666667
RA 3 YAN Y;PAGANI A;CARRERA E 2017 EXACT SOLUTIONS FOR FREE VIBRATION ANALYSIS OF LAMINATED, BOX AND SANDWICH BEAMS BY REFINED LAYER-WISE THEORY 8.1243500 31 6.200000
RA 3 XU X;FALLAHI N;YANG H 2020 EFFICIENT CUF-BASED FEM ANALYSIS OF THIN-WALL STRUCTURES WITH LAGRANGE POLYNOMIAL EXPANSION 4.9756137 41 20.500000
RA 3 FILIPPI M;CARRERA E 2016 BENDING AND VIBRATIONS ANALYSES OF LAMINATED BEAMS BY USING A ZIG-ZAG-LAYER-WISE THEORY 4.5267744 45 7.500000
Research Area 4: RA 4 (n = 458, density =0.31)
RA 4 JI J-M;ZHOU H;KIM HK 2018 RATIONAL DESIGN CRITERIA FOR D-Π-A STRUCTURED ORGANIC AND PORPHYRIN SENSITIZERS FOR HIGHLY EFFICIENT DYE-SENSITIZED SOLAR … 4.0734215 169 42.250000
RA 4 JI J-M;ZHOU H;EOM YK;K… 2020 14.2% EFFICIENCY DYE-SENSITIZED SOLAR CELLS BY CO-SENSITIZING NOVEL THIENO[3,2-B]INDOLE-BASED ORGANIC DYES WITH A PROMISIN… 4.4883505 129 64.500000
RA 4 TINGARE YS;VINH NS;CHO… 2017 NEW ACETYLENE-BRIDGED 9,10-CONJUGATED ANTHRACENE SENSITIZERS: APPLICATION IN OUTDOOR AND INDOOR DYE-SENSITIZED SOLAR CELLS 5.1872676 105 21.000000
RA 4 WU W;MAO D;HU F;XU S;C… 2017 A HIGHLY EFFICIENT AND PHOTOSTABLE PHOTOSENSITIZER WITH NEAR-INFRARED AGGREGATION-INDUCED EMISSION FOR IMAGE-GUIDED PHOTOD… 1.9815177 264 52.800000
RA 4 SONG H;LIU Q;XIE Y 2018 PORPHYRIN-SENSITIZED SOLAR CELLS: SYSTEMATIC MOLECULAR OPTIMIZATION, COADSORPTION AND COSENSITIZATION 4.5038955 113 28.250000
RA 4 ZHANG A;LI C;YANG F;ZH… 2017 AN ELECTRON ACCEPTOR WITH PORPHYRIN AND PERYLENE BISIMIDES FOR EFFICIENT NON-FULLERENE SOLAR CELLS 1.7103103 209 41.800000
RA 4 WANG C-L;ZHANG M;HSIAO… 2016 PORPHYRINS BEARING A CONSOLIDATED ANTHRYL DONOR WITH DUAL FUNCTIONS FOR EFFICIENT DYE-SENSITIZED SOLAR CELLS 6.9432504 50 8.333333
RA 4 LI C;LUO L;WU D;JIANG … 2016 PORPHYRINS WITH INTENSE ABSORPTIVITY: HIGHLY EFFICIENT SENSITIZERS WITH A PHOTOVOLTAIC EFFICIENCY OF UP TO 10.7% WITHOUT A… 5.9730554 49 8.166667
RA 4 LIU Y-C;CHOU H-H;HO F-… 2016 A FEASIBLE SCALABLE PORPHYRIN DYE FOR DYE-SENSITIZED SOLAR CELLS UNDER ONE SUN AND DIM LIGHT ENVIRONMENTS 3.9554411 72 12.000000
RA 4 DI CARLO G;BIROLI AO;T… 2018 Β-SUBSTITUTED ZNII PORPHYRINS AS DYES FOR DSSC: A POSSIBLE APPROACH TO PHOTOVOLTAIC WINDOWS 4.1969495 59 14.750000
Research Area 5: RA 5 (n = 235, density =0.39)
RA 5 KURUMISAWA Y;HIGASHINO… 2019 RENAISSANCE OF FUSED PORPHYRINS: SUBSTITUTED METHYLENE-BRIDGED THIOPHENE-FUSED STRATEGY FOR HIGH-PERFORMANCE DYE-SENSITIZE… 2.4357164 125 41.666667
RA 5 HIGASHINO T;KAWAMOTO K… 2016 EFFECTS OF BULKY SUBSTITUENTS OF PUSH-PULL PORPHYRINS ON PHOTOVOLTAIC PROPERTIES OF DYE-SENSITIZED SOLAR CELLS 4.2394464 51 8.500000
RA 5 LU Y;SONG H;LI X;ÅGREN… 2019 MULTIPLY WRAPPED PORPHYRIN DYES WITH A PHENOTHIAZINE DONOR: A HIGH EFFICIENCY OF 11.7% ACHIEVED THROUGH A SYNERGETIC COADS… 2.4822110 66 22.000000
RA 5 KLFOUT H;STEWART A;ELK… 2017 BODIPYS FOR DYE-SENSITIZED SOLAR CELLS 1.5589305 97 19.400000
RA 5 YANG G;TANG Y;LI X;ÅGR… 2017 EFFICIENT SOLAR CELLS BASED ON PORPHYRIN DYES WITH FLEXIBLE CHAINS ATTACHED TO THE AUXILIARY BENZOTHIADIAZOLE ACCEPTOR: SU… 2.0185328 66 13.200000
RA 5 REDDY KSK;CHEN Y-C;WU … 2018 COSENSITIZATION OF STRUCTURALLY SIMPLE PORPHYRIN AND ANTHRACENE-BASED DYE FOR DYE-SENSITIZED SOLAR CELLS 2.6874125 47 11.750000
RA 5 WU W;MAO D;XU S;KENRY;… 2018 POLYMERIZATION-ENHANCED PHOTOSENSITIZATION 0.9257428 129 32.250000
RA 5 KRISHNA NV;KRISHNA JVS… 2017 DONOR-Π-ACCEPTOR BASED STABLE PORPHYRIN SENSITIZERS FOR DYE-SENSITIZED SOLAR CELLS: EFFECT OF Π-CONJUGATED SPACERS 1.3656442 84 16.800000
RA 5 ZENG K;CHEN Y;ZHU W-H;… 2020 EFFICIENT SOLAR CELLS BASED ON CONCERTED COMPANION DYES CONTAINING TWO COMPLEMENTARY COMPONENTS: AN ALTERNATIVE APPROACH F… 1.1464365 96 48.000000
RA 5 YANG Y;WANG L;CAO H;LI… 2019 PHOTODYNAMIC THERAPY WITH LIPOSOMES ENCAPSULATING PHOTOSENSITIZERS WITH AGGREGATION-INDUCED EMISSION 1.1281254 87 29.000000
Research Area 6: RA 6 (n = NA, density =NA)
NA GONNISSEN J;BATUK D;NA… 2016 DIRECT OBSERVATION OF FERROELECTRIC DOMAIN WALLS IN LINBO3: WALL-MEANDERS, KINKS, AND LOCAL ELECTRIC CHARGES 4.3594863 54 9.000000
NA PAILLARD C;BAI X;INFAN… 2016 PHOTOVOLTAICS WITH FERROELECTRICS: CURRENT STATUS AND BEYOND 0.8081700 208 34.666667
NA DAS S;TANG YL;HONG Z;G… 2019 OBSERVATION OF ROOM-TEMPERATURE POLAR SKYRMIONS 0.3433380 225 75.000000
NA ZUBKO P;WOJDEL JC;HADJ… 2016 NEGATIVE CAPACITANCE IN MULTIDOMAIN FERROELECTRIC SUPERLATTICES 0.3668593 210 35.000000
NA NATAF GF;GUENNOU M;KRE… 2017 CONTROL OF SURFACE POTENTIAL AT POLAR DOMAIN WALLS IN A NONPOLAR OXIDE 4.9315838 15 3.000000
NA SALJE EKH;ALEXE M;KUST… 2016 DIRECT OBSERVATION OF POLAR TWEED IN LAALO3 1.7404915 39 6.500000
NA YADAV AK;NGUYEN KX;HON… 2019 SPATIALLY RESOLVED STEADY-STATE NEGATIVE CAPACITANCE 0.4600869 139 46.333333
NA DAMODARAN AR;CLARKSON … 2017 PHASE COEXISTENCE AND ELECTRIC-FIELD CONTROL OF TOROIDAL ORDER IN OXIDE SUPERLATTICES 0.5528578 104 20.800000
NA PORCARELLI L;ABOUDZADE… 2017 SINGLE-ION TRIBLOCK COPOLYMER ELECTROLYTES BASED ON POLY(ETHYLENE OXIDE) AND METHACRYLIC SULFONAMIDE BLOCKS FOR LITHIUM ME… 0.4962928 80 16.000000
NA NATAF GF;GUENNOU M 2020 OPTICAL STUDIES OF FERROELECTRIC AND FERROELASTIC DOMAIN WALLS 2.0081678 18 9.000000

Development

Connectivity between the research areas

Technical description

In a bibliographic coupling network, the coupling-strength between publications is determined by the number of commonly cited references they share, assuming a common pool of references to indicate similarity in context, methods, or theory. Formally, the strength of the relationship between a publication pair \(i\) and \(j\) (\(s_{i,j}^{bib}\)) is expressed by the number of commonly cited references.

\[s_{i,j}^{bib} = \sum_m c_{i,m} c_{j,m}\]

Since our corpus contains publications which differ strongly in terms of the number of cited references, we normalize the coupling strength by the Jaccard similarity coefficient. Here, we weight the intercept of two publications’ bibliography (shared refeences) by their union (number of all references cited by either \(i\) or \(j\)). It is bounded between zero and one, where one indicates the two publications to have an identical bibliography, and zero that they do not share any cited reference. Thereby, we prevent publications from having high coupling strength due to a large bibliography (e.g., literature surveys).

\[S_{i,j}^{jac-bib} =\frac{C(i \cap j)}{C(i \cup j)} = \frac{s_{i,j}^{bib}}{c_i + c_j - s_{i,j}^{bib}}\]

More recent articles have a higher pool of possible references to co-cite to, hence they are more likely to be coupled. Consequently, bibliographic coupling represents a forward looking measure, and the method of choice to identify the current knowledge frontier at the point of analysis.

Knowledge Bases, Research Areas & Topics Interaction

Endnotes

All results are preliminary so far…

LS0tCnRpdGxlOiAiTHV4ZW1ib3VyZyBSZXNlYXJjaCBFdmFsdWF0aW9uIDIwMjI6IEZpZWxkIE1hcHBpbmcgb2YgS25vd2xlZGdlIFN0cnVjdHVyZSIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiBmYWxzZQogICAgdG9jX2RlcHRoOiAyCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogZmFsc2UKICAgIHRvY19kZXB0aDogMgogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCnBhcmFtczoKICAgIGluc3RpdHV0ZTogCiAgICAgICB2YWx1ZTogJ1Rlc3RpbnN0JwogICAgZGVwYXJ0bWVudDoKICAgICAgIHZhbHVlOiAnVGVzdGRlcHQnCi0tLQoKPCEtLS0KIyBBZGQgdG8gWUFNTCB3aGVuIHJldmlld2luZwogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiBmYWxzZQogICAgdG9jX2RlcHRoOiAyCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKLS0tPgoKCmBgYHs9aHRtbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDEyMDBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KPC9zdHlsZT4KYGBgCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjIEdlbmVyaWMgcHJlYW1ibGUKI3JtKGxpc3Q9bHMoKSkKU3lzLnNldGVudihMQU5HID0gImVuIikKb3B0aW9ucyhzY2lwZW4gPSA1KQpzZXQuc2VlZCgxMzM3KQoKIyMjIExvYWQgcGFja2FnZXMgIAojIGdlbmVyYWwKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobWFncml0dHIpCgojIEtpYmxpbyAmIE5XCmxpYnJhcnkoYmlibGlvbWV0cml4KQpsaWJyYXJ5KHRpZHlncmFwaCkKbGlicmFyeShnZ3JhcGgpCgojIE5MUApsaWJyYXJ5KHRpZHl0ZXh0KQoKIyBEYXRhdml6CmxpYnJhcnkocGxvdGx5KQoKIyBLbml0CmxpYnJhcnkoa25pdHIpICMgRm9yIGRpc3BsYXkgb2YgdGhlIG1hcmtkb3duCmxpYnJhcnkoa2FibGVFeHRyYSkgIyBGb3IgdGFibGUgc3R5bGluZwoKIyBvd24gZnVuY3Rpb25zCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19iYXNpYy5SIikKc291cmNlKCIuLi9mdW5jdGlvbnMvZnVuY3Rpb25zX3N1bW1hcnkuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zLzAwX3BhcmFtZXRlcnMuUiIpCgojIEtuaXRyIG9wdGlvbnMKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KI3Zhcl9pbnN0IDwtICdMSVNFUicKI3Zhcl9kZXB0IDwtICdVRCcKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdmFyX2luc3QgPC0gcGFyYW1zJGluc3RpdHV0ZQp2YXJfZGVwdCA8LSBwYXJhbXMkZGVwYXJ0bWVudApgYGAKCgojIEludHJvZHVjdGlvbjogYHIgdmFyX2luc3RgIERlcGFydG1lbnQgYHIgdmFyX2RlcHRgCgpIZXJlIGFyZSBwcmVsaW1pbmFyeSByZXN1bHRzIG9mIHRoZSBiaWJsaW9tZXRyaWMgbWFwcGluZyBvZiB0aGUgMjAyMiBMdXhlbWJvdXJnIHJlc2VhcmNoIGV2YWx1YXRpb24uIEl0cyBwdXJwb3NlIGlzOgoKKiBUbyBtYXAgdGhlIGJyb2FkZXIgcmVzZWFyY2ggY29tbXVuaXR5IGFuZCBkaXN0aW5jdCByZXNlYXJjaCBmaWVsZCB0aGUgZGVwYXJ0bWVudCBjb250cmlidXRlcyB0by4KKiBJZGVudGlmeSBjb3JlIGtub3dsZWRnZSBiYXNlcywgcmVzZWFyY2ggYXJlYXMgZ3RyZW5kcyBhbmQgdG9waWNzLgoqIEhpZ2hsaWdodCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGRlcGFydG1lbnQgd2l0aGluIHRoaXMgZHluYW1pY3MuCgpUaGUgbWV0aG9kIGZvciB0aGUgcmVzZWFyY2gtZmllbGQtbWFwcGluZyBjYW4gYmUgcmVpdmlld2VkIGhlcmU6CgpbUmFrYXMsIE0uLCAmIEhhaW4sIEQuIFMuICgyMDE5KS4gVGhlIHN0YXRlIG9mIGlubm92YXRpb24gc3lzdGVtIHJlc2VhcmNoOiBXaGF0IGhhcHBlbnMgYmVuZWF0aCB0aGUgc3VyZmFjZT8uIFJlc2VhcmNoIFBvbGljeSwgNDgoOSksIDEwMzc4Ny5dKGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oucmVzcG9sLjIwMTkuMDQuMDExKQoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIExvYWQgZGF0YQpNIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogIGRpc3RpbmN0KFVULCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgCiAgZmlsdGVyKFBZID49IFBZX21pbiwgUFkgPD0gUFlfbWF4KSAKYGBgCgojIFNlZWQgQXJ0aWNsZXMKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpzZWVkIDwtY29udmVydDJkZihmaWxlID0gcGFzdGUwKCcuLi8uLi9kYXRhL3NlZWRzL3Njb3B1c18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICdfc2VlZF9zZWxlY3QuY3N2JyksIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUKICBhc190aWJibGUoKSAlPiUKICBtdXRhdGUoc2VlZCA9IFRSVUUpIApgYGAKClRoZSBzZWVkIGFydGljbGVzIGRlZW1lZCByZXByZXNlbnRhdGl2ZSBmb3IgdGhlIGFjdGl2ZSBhcmVhcyBvZiByZXNlYXJjaCBpbiB0aGUgaW5zdGl0dXRpb24sIGFuZCBpbmNsdWRlIGF1dGhvcnMgYWZmaWxpYXRlZCB3aXRoIHRoZSBpbnN0aXR1dGlvbi4gVGhleSBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhyZWUgd2F5czoKCjEuIFZpYSBiaWJsaW9ncmFwaGljIGNsdXN0ZXJpbmcgb2YgdGhlIGluc3RpdHV0aW9ucyBwdWJsaWNhdGlvbnMgYW5kIHNlbGVjdGlvbiBvZiBtb3N0IGNlbnRyYWwgYXJ0aWNsZXMgcGVyIGNsdXN0ZXIgKG9ubHkgY2xzdXRlcnMgd2hlcmUgbiA+PSAwLjA1TikuIFNlbGVjdGlvbiBjYW4gYmUgZm91bmQgYXQ6YHIgcGFzdGUwKCdodHRwczovL2dpdGh1Yi5jb20vZGFuaWVsLWhhaW4vYmlibGlvX2x1eF8yMDIyL2Jsb2IvbWFzdGVyL291dHB1dC9zZWVkL3Njb3B1c18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICdfc2VlZC5jc3YnKWAKMi4gTUFudWFsIHNlbGVjdGlvbiBvZiByZWxldmFudCBwdWJsaWNhdGlvbnMuCjMuIEEgY29tYmluYXRpb24gb2YgMS4gYW5kIDIuCgpUaGUgcHJlc2VudCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHNlZWQgYXJ0aWNsZXM6CgpgYGB7cn0Kc2VlZCAlPiUKICBzZWxlY3QoQVUsIFBZLCBUSSwgSkkpICU+JQogIG11dGF0ZShBVSA9IEFVICU+JSBzdHJfdHJ1bmMoMzApLAogICAgICAgICBUSSA9IFRJICU+JSBzdHJfdHJ1bmMoMTAwKSwKICAgICAgICAgSkkgPSBKSSAlPiUgc3RyX3RydW5jKDMwKSkgJT4lCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgoKCiMgVG9waWMgbW9kZWxsaW5nIHsudGFic2V0fQoKSGVyZSwgd2UgcmVwb3J0IHRoZSByZXN1bHRzIG9mIGEgTERBIHRvcGljLW1vZGVsbGluZyAoYmFzaWNhbGx5LCBjbHVzdGVyaW5nIG9uIHdvcmRzKSBvbiBhbGwgdGl0bGUrYWJzdHJhY3QgdGV4dHMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdGV4dF90aWR5IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfdGlkeV8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCnRleHRfbGRhIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfTERBXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgCgp0ZXh0X2xkYV9iZXRhIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJiZXRhIikgCnRleHRfbGRhX2dhbW1hIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJnYW1tYSIpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc190b3AgPC0gdGliYmxlKCAKICBjb20gPSAxOih0ZXh0X2xkYV9nYW1tYSAlPiUgcHVsbCh0b3BpYykgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdUUCcsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3RwKSwKICBjb21fbmFtZSA9IAogICAgIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiAgICBwYXN0ZSh0eXBlLCAxOih0ZXh0X2xkYV9nYW1tYSAlPiUgcHVsbCh0b3BpYykgJT4lIG5fZGlzdGluY3QoKSkpCiAgIyAjIDJuZCBhbHRlcm5hdGl2ZTogTG9hZCBmcm9tIGNzdgogICMgcmVhZF9jc3YoJy4uLy4uL2RhdGEvY29tbXVuaXR5X2xhYmVsaW5nJykgJT4lIGZpbHRlcih0eXBlID0gJ3RvcGljJywgaW5zdGl0dXRlID0gdmFyX2luc3QsIGRlcGFydG1lbnQgPSB2YXJfZGVwdCkgJT4lIGFycmFuZ2UoY29tKSAlPiUgcHVsbChsYWJlbCkKICAjIDNyZCBhbHRlcm5hdGl2ZTogZGVjbGFyZSBoZXJlCiAgICAjYygnMSBUSVMgJiBNYXJrZXRzJywgJzIgPyAuLi4gJywpCiAgKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQp0ZXh0X2xkYV9iZXRhICU8PiUgIGxlZnRfam9pbihjb21fbmFtZXNfdG9wICU+JSBzZWxlY3QoY29tLCBjb21fbmFtZSwgY29sKSwgYnkgPSBjKCd0b3BpYycgPSAnY29tJykpCnRleHRfbGRhX2dhbW1hICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc190b3AgJT4lIHNlbGVjdChjb20sIGNvbV9uYW1lLCBjb2wpLCBieSA9IGMoJ3RvcGljJyA9ICdjb20nKSkKYGBgCgoKIyMgVG9waWNzIGJ5IHRvcHdvcmRzCgpgYGB7ciwgZmlnLndpZHRoPTE3LjUsIGZpZy5oZWlnaHQ9MTcuNX0gCnRleHRfbGRhX2JldGEgJT4lCiAgZ3JvdXBfYnkoY29tX25hbWUpICU+JQogIHNsaWNlX21heChiZXRhLCBuID0gMTApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGVybSA9IHJlb3JkZXJfd2l0aGluKHRlcm0sIGJldGEsIGNvbV9uYW1lKSkgJT4lCiAgZ2dwbG90KGFlcyh0ZXJtLCBiZXRhLCBmaWxsID0gZmFjdG9yKGNvbV9uYW1lKSkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+IGNvbV9uYW1lLCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSAzKSArCiAgY29vcmRfZmxpcCgpICsKICBzY2FsZV94X3Jlb3JkZXJlZCgpICsKICBsYWJzKHggPSAiSW50cmEtdG9waWMgZGlzdHJpYnV0aW9uIG9mIHdvcmQiLAogICAgICAgeSA9ICJXb3JkcyBpbiB0b3BpYyIpICsgCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICJMZWdlbmQiLCB2YWx1ZXMgPSBjb21fbmFtZXNfdG9wICU+JSBwdWxsKGNvbCkpIAoKI3Bsb3RfbHkgPC0gcGxvdCAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpCiNodG1sd2lkZ2V0czo6c2F2ZVdpZGdldChwbG90bHk6OmFzX3dpZGdldChwbG90X2x5KSwgJy4uL291dHB1dFx2aXNfcGxvdGx5X3RvcGljX3Rlcm1zLmh0bWwnLCBzZWxmY29udGFpbmVkID0gVFJVRSkKYGBgCgoqKk5vdGU6KiogV2hpbGUgdGhpcyBzdGF0aWMgdmllcyBpcyBoZWxwZnVsLCBJIHJlY29tbWVuZCB1c2luZyB0aGUgaW50ZXJhY3RpdmUgTERBVmlzIHZlcnNpb24gdG8gYmUgZm91bmQgdW5kZXIgYHIgcGFzdGUwKCdodHRwczovL2RhbmllbC1oYWluLmdpdGh1Yi5pby9iaWJsaW9fbHV4XzIwMjIvb3V0cHV0L3RvcGljX21vZGVsbGluZy9MREF2aXpfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcy9pbmRleC5odG1sI3RvcGljPTEmbGFtYmRhPTAuNjAmdGVybT0nKWAuIEZvciBmdW5jdGlvbmFsaXR5IGFuZCB1c2FnZSwgc2VlIHRlY2huaWNhbCBkZXNjcmlwdGlvbiBpbiB0aGUgbmV4dCB0YWIuCgojIyBUb3BpY3Mgb3ZlciB0aW1lCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQp0ZXh0X2xkYV9nYW1tYSAlPiUKICByZW5hbWUod2VpZ2h0ID0gZ2FtbWEpICU+JQogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZKSwgYnkgPSBjKCdkb2N1bWVudCcgPSAnWFgnKSkgJT4lCiAgbXV0YXRlKFBZID0gYXMubnVtZXJpYyhQWSkpICU+JQogIGdyb3VwX2J5KFBZLCBjb21fbmFtZSkgJT4lIHN1bW1hcmlzZSh3ZWlnaHQgPSBzdW0od2VpZ2h0KSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZSh3ZWlnaHRfUFkgPSBzdW0od2VpZ2h0KSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUod2VpZ2h0X3JlbCA9IHdlaWdodCAvIHdlaWdodF9QWSkgJT4lCiAgc2VsZWN0KFBZLCBjb21fbmFtZSwgd2VpZ2h0LCB3ZWlnaHRfcmVsKSAlPiUKICBmaWx0ZXIoUFkgPj0gUFlfbWluICYgUFkgPD0gUFlfbWF4KSAlPiUKICBhcnJhbmdlKFBZLCBjb21fbmFtZSkgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gd2VpZ2h0LCB5MiA9IHdlaWdodF9yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGNvbV9uYW1lLCAgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfdHAsIAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIlRvcGljIHBvcHVsYXJpdHkgYW5udWFseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgdG9waWMgYW5udWFsbHkiKSArCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gcGFzdGUoJ1RvcGljIE1vZGVsbGluZzonLCB2YXJfaW5zdCwgJ0RlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdBYnNvbHV0ZSB0b3BpYyBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgdG9waWMgYXBwZWFyYW5jZSAocmlnaHQpJykKYGBgCgoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHRleHRfdGlkeSwgdGV4dF9sZGEpCmBgYAoKCiMjIFRlY2huaWNhbCBEZXNjcmlwdGlvbgoKIyMjIExEQSBUb3BpYyBNb2RlbGxpbmcKClRvcGljIG1vZGVsaW5nIGlzIGEgdHlwZSBvZiBzdGF0aXN0aWNhbCBtb2RlbGluZyBmb3IgZGlzY292ZXJpbmcgdGhlIGFic3RyYWN0IOKAnHRvcGljc+KAnSB0aGF0IG9jY3VyIGluIGEgY29sbGVjdGlvbiBvZiBkb2N1bWVudHMuIExhdGVudCBEaXJpY2hsZXQgQWxsb2NhdGlvbiAoTERBKSBpcyBhbiBleGFtcGxlIG9mIHRvcGljIG1vZGVsIGFuZCBpcyB1c2VkIHRvIGNsYXNzaWZ5IHRleHQgaW4gYSBkb2N1bWVudCB0byBhIHBhcnRpY3VsYXIgdG9waWMuIAoKTERBIGlzIGEgZ2VuZXJhdGl2ZSBwcm9iYWJpbGlzdGljIG1vZGVsIHRoYXQgYXNzdW1lcyBlYWNoIHRvcGljIGlzIGEgbWl4dHVyZSBvdmVyIGFuIHVuZGVybHlpbmcgc2V0IG9mIHdvcmRzLCBhbmQgZWFjaCBkb2N1bWVudCBpcyBhIG1peHR1cmUgb2Ygb3ZlciBhIHNldCBvZiB0b3BpYyBwcm9iYWJpbGl0aWVzLiBJdCBidWlsZHMgYSB0b3BpYyBwZXIgZG9jdW1lbnQgbW9kZWwgYW5kIHdvcmRzIHBlciB0b3BpYyBtb2RlbCwgbW9kZWxlZCBhcyBEaXJpY2hsZXQgZGlzdHJpYnV0aW9ucy4KCiMjIyBMREFWaXMKCkxEQXZpcyBpcyBhIHdlYi1iYXNlZCBpbnRlcmFjdGl2ZSB2aXN1YWxpc2F0aW9uIG9mIHRvcGljcyBlc3RpbWF0ZWQgdXNpbmcgTERBLiBJdCBwcm92aWRlcyBhIGdsb2JhbCB2aWV3IG9mIHRoZSB0b3BpY3MgKGFuZCBob3cgdGhleSBkaWZmZXIgZnJvbSBlYWNoIG90aGVyKSwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZyBmb3IgYSBkZWVwIGluc3BlY3Rpb24gb2YgdGhlIHRlcm1zIG1vc3QgaGlnaGx5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGluZGl2aWR1YWwgdG9waWMuIFRoZSBwYWNrYWdlIGV4dHJhY3RzIGluZm9ybWF0aW9uIGZyb20gYSBmaXR0ZWQgTERBIHRvcGljIG1vZGVsIHRvIGluZm9ybSBhbiBpbnRlcmFjdGl2ZSB3ZWItYmFzZWQgdmlzdWFsaXphdGlvbi4gVGhlIHZpc3VhbGlzYXRpb24gaGFzIHR3byBiYXNpYyBwaWVjZXMuCgpUaGUgKipsZWZ0IHBhbmVsKiogdmlzdWFsaXNlIHRoZSB0b3BpY3MgYXMgY2lyY2xlcyBpbiB0aGUgdHdvLWRpbWVuc2lvbmFsIHBsYW5lIHdob3NlIGNlbnRyZXMgYXJlIGRldGVybWluZWQgYnkgY29tcHV0aW5nIHRoZSBKZW5zZW7igJNTaGFubm9uIGRpdmVyZ2VuY2UgYmV0d2VlbiB0b3BpY3MsIGFuZCB0aGVuIGJ5IHVzaW5nIG11bHRpZGltZW5zaW9uYWwgc2NhbGluZyB0byBwcm9qZWN0IHRoZSBpbnRlci10b3BpYyBkaXN0YW5jZXMgb250byB0d28gZGltZW5zaW9ucy4gRWFjaCB0b3BpY+KAmXMgb3ZlcmFsbCBwcmV2YWxlbmNlIGlzIGVuY29kZWQgdXNpbmcgdGhlIGFyZWFzIG9mIHRoZSBjaXJjbGVzLgoKVGhlICoqcmlnaHQgcGFuZWwqKiBkZXBpY3RzIGEgaG9yaXpvbnRhbCBiYXIgY2hhcnQgd2hvc2UgYmFycyByZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgdGVybXMgdGhhdCBhcmUgdGhlIG1vc3QgdXNlZnVsIGZvciBpbnRlcnByZXRpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0b3BpYyBvbiB0aGUgbGVmdC4gQSBwYWlyIG9mIG92ZXJsYWlkIGJhcnMgcmVwcmVzZW50IGJvdGggdGhlIGNvcnB1cy13aWRlIGZyZXF1ZW5jeSBvZiBhIGdpdmVuIHRlcm0gYXMgd2VsbCBhcyB0aGUgdG9waWMtc3BlY2lmaWMgZnJlcXVlbmN5IG9mIHRoZSB0ZXJtLgoKVGhlICRcbGFtYmRhJCBzbGlkZXIgYWxsb3dzIHRvIHJhbmsgdGhlIHRlcm1zIGFjY29yZGluZyB0byB0ZXJtIHJlbGV2YW5jZS4gQnkgZGVmYXVsdCwgdGhlIHRlcm1zIG9mIGEgdG9waWMgYXJlIHJhbmtlZCBpbiBkZWNyZWFzaW5nIG9yZGVyIGFjY29yZGluZyB0aGVpciB0b3BpYy1zcGVjaWZpYyBwcm9iYWJpbGl0eSAoICRcbGFtYmRhJCA9IDEgKS4gTW92aW5nIHRoZSBzbGlkZXIgYWxsb3dzIHRvIGFkanVzdCB0aGUgcmFuayBvZiB0ZXJtcyBiYXNlZCBvbiBtdWNoIGRpc2NyaW1pbmF0b3J5IChvciAicmVsZXZhbnQiKSBhcmUgZm9yIHRoZSBzcGVjaWZpYyB0b3BpYy4gVGhlIHN1Z2dlc3RlZCBvcHRpbWFsIHZhbHVlIG9mICRcbGFtYmRhJCBpcyAwLjYuCgoKIyBLbm93bGVkZ2UgQmFzZXM6IENvLUNpdGF0aW9uIG5ldHdvcmsgYW5hbHlzaXMgey50YWJzZXR9CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KQ19udyA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9DX253XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY29tX25hbWVzX2NpdCA8LSB0aWJibGUoIAogIGNvbSA9IDE6KENfbncgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSwKICB0eXBlID0gJ0tCJywKICBjb2wgPSBjb20gJT4lIGdnX2NvbG9yX3NlbGVjdChwYWwgPSBwYWxfa2IpLAogIGNvbV9uYW1lID0gCiAgICAjICMgMXN0IGFsdGVybmF0aXZlOiBOdW1iZXIgdGhlbSAxLW4KICAgIHBhc3RlKHR5cGUsIDE6KENfbncgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSkKICAgICMgIyAybmQgYWx0ZXJuYXRpdmU6IExvYWQgZnJvbSBjc3YKICAjIHJlYWRfY3N2KCcuLi8uLi9kYXRhL2NvbW11bml0eV9sYWJlbGluZycpICU+JSBmaWx0ZXIodHlwZSA9ICdrbm93bGVkZ2VfYmFzZScsIGluc3RpdHV0ZSA9IHZhcl9pbnN0LCBkZXBhcnRtZW50ID0gdmFyX2RlcHQpICU+JSBhcnJhbmdlKGNvbSkgJT4lIHB1bGwobGFiZWwpCiAgIyAzcmQgYWx0ZXJuYXRpdmU6IGRlY2xhcmUgaGVyZQogICAgI2MoJzEgVElTICYgTWFya2V0cycsICcyID8gLi4uICcsKQogICkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KQ19udyAlPD4lIGxlZnRfam9pbihjb21fbmFtZXNfY2l0ICU+JSBzZWxlY3QoY29tLCBjb21fbmFtZSwgY29sKSwgYnkgPSAiY29tIikKYGBgCgoKKipOb3RlOioqIFRoaXMgYW5hbHlzaXMgcmVmZXJzIHRoZSBjby1jaXRhdGlvbiBhbmFseXNpcywgd2hlcmUgdGhlIGNpdGVkIHJlZmVyZW5jZXMgYW5kIG5vdCB0aGUgb3JpZ2luYWwgcHVibGljYXRpb25zIGFyZSB0aGUgdW5pdCBvZiBhbmFseXNpcy4gU2VlIHRhYiBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucwoKIyMgS25vd2xlZGdlIEJhc2VzIHN1bW1hcnkKCkluIG9yZGVyIHRvIHBhcnRpdGlvbiBuZXR3b3JrcyBpbnRvIGNvbXBvbmVudHMgb3IgY2x1c3RlcnMsIHdlIGRlcGxveSBhICoqY29tbXVuaXR5IGRldGVjdGlvbioqIHRlY2huaXF1ZSBiYXNlZCBvbiB0aGUgKipMb3ZhaW4gQWxnb3JpdGhtKiogKEJsb25kZWwgZXQgYWwuLCAyMDA4KS4gVGhlIExvdmFpbiBBbGdvcml0aG0gaXMgYSBoZXVyaXN0aWMgbWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8gb3B0aW1pemUgdGhlIG1vZHVsYXJpdHkgb2YgY29tbXVuaXRpZXMgd2l0aGluIGEgbmV0d29yayBieSBtYXhpbWl6aW5nIHdpdGhpbi0gYW5kIG1pbmltaXppbmcgYmV0d2Vlbi1jb21tdW5pdHkgY29ubmVjdGl2aXR5LiBXZSBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGNvbW11bml0aWVzID0ga25vd2xlZGdlIGJhc2VzLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmtiX3N0YXRzIDwtIENfbncgJT4lCiAgZ3JvdXBfYnkoY29tX25hbWUpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHJlbG9jYXRlKGNvbV9uYW1lLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CmtiX3N1bSA8LUNfbncgJT4lIGdyb3VwX2J5KGNvbSkgJT4lIAogIHNlbGVjdChjb20sIG5hbWUsIGRncl9pbnQsIGRncikgJT4lCiAgYXJyYW5nZShjb20sIGRlc2MoZGdyX2ludCkpICU+JQogIG11dGF0ZShuYW1lID0gbmFtZSAlPiUgc3RyX3RydW5jKDE1MCkpICU+JQogIHNsaWNlX21heChvcmRlcl9ieSA9IGRncl9pbnQsIG4gPSAxMCwgd2l0aF90aWVzID0gRkFMU0UpICU+JSAKICBrYWJsZSgpIAoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19jaXQpKXsKICBrYl9zdW0gPC0ga2Jfc3VtICU+JQogICAgcGFja19yb3dzKHBhc3RlMCgnS25vd2xlZGdlIEJhc2UgJywgaSwgJzogJywgY29tX25hbWVzX2NpdFtpLCAnY29tX25hbWUnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywga2Jfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9Jywga2Jfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKa2Jfc3VtICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCiMjIERldmVsb3BtZW50IG9mIEtub3dsZWRnZSBCYXNlcwoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmVsXzJtIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL2VsXzJtXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lCiAgZHJvcF9uYSgpCmBgYAoKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjaXRfY29tX3llYXIgPC0gZWxfMm0gJT4lCiAgY291bnQoY29tX2NpdCwgUFksIG5hbWUgPSAnVEMnKSAlPiUKICBncm91cF9ieShQWSkgJT4lCiAgbXV0YXRlKFRDX3JlbCA9IFRDIC8gc3VtKFRDKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoUFksIGNvbV9jaXQpICU+JQogIGxlZnRfam9pbihjb21fbmFtZXNfY2l0ICwgYnkgPSBjKCdjb21fY2l0JyA9ICdjb20nKSkgJT4lIAogIGNvbXBsZXRlKGNvbV9uYW1lLCBQWSwgZmlsbCA9IGxpc3QoVEMgPSAwLCBUQ19yZWwgPSAwKSkKCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0PTcuNX0KY2l0X2NvbV95ZWFyICU+JQogIHBsb3Rfc3VtbWFyeV90aW1lbGluZSh5MSA9IFRDLCB5MiA9IFRDX3JlbCwgdCA9IFBZLCB0X21pbiA9IFBZX21pbiwgdF9tYXggPSBQWV9tYXgsIGJ5ID0gY29tX25hbWUsIHBhbCA9IHBhbF9rYiwgbGFiZWwgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIk51bWJlciBjaXRhdGlvbnMgcmVjaWV2ZWQgYW5udWFsbHkiLCAgeTJfdGV4dCA9ICJTaGFyZSBvZiBjaXRhdGlvbnMgcmVjaWV2ZWQgYW5udWFsbHkiKSArCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gcGFzdGUoJ0tub3dsZWRnZSBCc2VzOicsIHZhcl9pbnN0LCAnRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSBrbm93bGVkZ2UgYmFzZSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIFRlY2huaWNhbCBkZXNjcmlwdGlvbgpJbiBhIGNvLWNpdHRpb24gbmV0d29yaywgdGhlIHN0cmVuZ3RoIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIHJlZmVyZW5jZSBwYWlyICRtJCBhbmQgJG4kICgkc197bSxufV57Y29jfSQpIGlzIGV4cHJlc3NlZCBieSB0aGUgbnVtYmVyIG9mIHB1YmxpY2F0aW9ucyAkQyQgd2hpY2ggYXJlIGpvaW50bHkgY2l0aW5nIHJlZmVyZW5jZSAkbSQgYW5kICRuJC4gCgokJHNfe20sbn1ee2NvY30gPSBcc3VtX2kgY197aSxtfSBjX3tpLG59JCQKClRoZSBpbnR1aXRpb24gaGVyZSBpcyB0aGF0IHJlZmVyZW5jZXMgd2hpY2ggYXJlIGZyZXF1ZW50bHkgY2l0ZWQgdG9nZXRoZXIgYXJlIGxpa2VseSB0byBzaGFyZSBjb21tb25hbGl0aWVzIGluIHRoZW9yeSwgdG9waWMsIG1ldGhvZG9sb2d5LCBvciBjb250ZXh0LiBJdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBtZWFzdXJlIG9mIHNpbWlsYXJpdHkgYXMgZXZhbHVhdGVkIGJ5IG90aGVyIHJlc2VhcmNoZXJzIHRoYXQgZGVjaWRlIHRvIGpvaW50bHkgY2l0ZSBib3RoIHJlZmVyZW5jZXMuIEJlY2F1c2UgdGhlIHB1YmxpY2F0aW9uIHByb2Nlc3MgaXMgdGltZS1jb25zdW1pbmcsIGNvLWNpdGF0aW9uIGlzIGEgYmFja3dhcmQtbG9va2luZyBtZWFzdXJlLCB3aGljaCBpcyBhcHByb3ByaWF0ZSB0byBtYXAgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvcmUgbGl0ZXJhdHVyZSBvZiBhIGZpZWxkLgoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCiMgUmVzZWFyY2ggQXJlYXM6IEJpYmxpb2dyYXBoaWMgY291cGxpbmcgYW5hbHlzaXMgey50YWJzZXR9CgojIyBSZXNlYXJjaCBBcmVhcyBtYWluIHN1bW1hcnkKClRoaXMgaXMgYXJndWFibHkgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydC4gSGVyZSwgd2UgaWRlbnRpZnkgdGhlIGxpdGVyYXR1cmUncyBjdXJyZW50IGtub3dsZWRnZSBmcm9udGllciBieSBjYXJyeWluZyBvdXQgYSBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFuYWx5c2lzIG9mIHRoZSBwdWJsaWNhdGlvbnMgaW4gb3VyIGNvcnB1cy4gVGhpcyBtZWFzdXJlICB1c2VzIGJpYmxpb2dyYXBoaWNhbCBpbmZvcm1hdGlvbiBvZiAgcHVibGljYXRpb25zIHRvIGVzdGFibGlzaCBhIHNpbWlsYXJpdHkgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gQWdhaW4sIG1ldGhvZCBkZXRhaWxzIHRvIGJlIGZvdW5kIGluIHRoZSB0YWIgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmAuIEFzIHlvdSB3aWxsIHNlZSwgd2UgaWRlbnRpZnkgdGhlIG1haW4gcmVzZWFyY2ggYXJlYSwgYnV0IGFsc28gYSBzZXQgb2YgYWRqYWNlbnQgcmVzZWFyY2ggYXJlYXMgd2l0aCBzb21lIHRoZW9yZXRpY2FsL21ldGhvZG9sb2dpY2FsL2FwcGxpY2F0aW9uIG92ZXJsYXAuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KTV9iaWIgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvTV9iaWJfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgYXNfdGliYmxlKCkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY29tX25hbWVzX2JpYiA8LSB0aWJibGUoIAogIGNvbSA9IDE6KE1fYmliICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdSQScsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3JhKSwKICBjb21fbmFtZSA9IAogICAgIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiAgICBwYXN0ZSh0eXBlLCAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQogICAgIyAjIDJuZCBhbHRlcm5hdGl2ZTogTG9hZCBmcm9tIGNzdgogICMgcmVhZF9jc3YoJy4uLy4uL2RhdGEvY29tbXVuaXR5X2xhYmVsaW5nJykgJT4lIGZpbHRlcih0eXBlID0gJ3Jlc2VhcmNoX2FyZWEnLCBpbnN0aXR1dGUgPSB2YXJfaW5zdCwgZGVwYXJ0bWVudCA9IHZhcl9kZXB0KSAlPiUgYXJyYW5nZShjb20pICU+JSBwdWxsKGxhYmVsKQogICMgM3JkIGFsdGVybmF0aXZlOiBkZWNsYXJlIGhlcmUKICAgICNjKCcxIFRJUyAmIE1hcmtldHMnLCAnMiA/IC4uLiAnLCkKICApCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGNvbV9uYW1lLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKClRvIGlkZW50aWZ5IGNvbW11bml0aWVzIGluIHRoZSBmaWVsZCdzIGtub3dsZWRnZSBmcm9udGllciAobGFiZWxlZCAqKnJlc2VhcmNoIGFyZWFzKiopIHdlIGFnYWluIHVzZSB0aGUgKipMb3ZhaW4gQWxnb3JpdGhtKiogKEJsb25kZWwgZXQgYWwuLCAyMDA4KS4gV2UgaWRlbnRpZnkgdGhlIGZvbGxvd2luZyBjb21tdW5pdGllcyA9IHJlc2VhcmNoIGFyZWFzLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJhX3N0YXRzIDwtIE1fYmliICU+JQogIGRyb3BfbmEoY29tKSAlPiUKICBncm91cF9ieShjb20sIGNvbV9uYW1lKSAlPiUKICBzdW1tYXJpc2UobiA9IG4oKSwgZGVuc2l0eV9pbnQgPSAoKHN1bShkZ3JfaW50KSAvIChuKCkgKiAobigpIC0gMSkpKSAqIDEwMCkgJT4lIHJvdW5kKDMpKSAlPiUKICBzZWxlY3QoY29tLCBjb21fbmFtZSwgZXZlcnl0aGluZygpKQpgYGAKCmBgYHtyfQpyYV9zdW0gPC0gTV9iaWIgJT4lIGdyb3VwX2J5KGNvbV9uYW1lKSAlPiUgCiAgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChYWCwgQVUsIFBZLCBUSSwgVEMpLCBieSA9ICdYWCcpICU+JQogIG11dGF0ZShkZ3Jfc2VsZWN0ID0gKGRncl9pbnQgLyBtYXgoZGdyX2ludCkgKiAoVEMgLyBtYXgoVEMpKSkgKSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBkZ3Jfc2VsZWN0LCBuID0gMTAsIHdpdGhfdGllcyA9IEZBTFNFKSAlPiUgCiAgbXV0YXRlKFRDX3llYXIgPSBUQyAvICgyMDIxICsgMSAtIFBZKSwKICAgICAgICAgQVUgPSBBVSAlPiUgc3RyX3RydW5jKDI1KSwKICAgICAgICAgVEkgPSBUSSAlPiUgc3RyX3RydW5jKDEyNSkpICU+JQogIHNlbGVjdChjb21fbmFtZSwgQVUsIFBZLCBUSSwgZGdyX2ludCwgVEMsIFRDX3llYXIpICU+JQogIGthYmxlKCkKCgpmb3IoaSBpbiAxOm5yb3coY29tX25hbWVzX2JpYikpewogIHJhX3N1bSAgJTw+JQogICAgcGFja19yb3dzKHBhc3RlMCgnUmVzZWFyY2ggQXJlYSAnLCBpLCAnOiAnLCBjb21fbmFtZXNfYmliW2ksICdjb21fbmFtZSddLAogICAgICAgICAgICAgICAgICAgICAnICAgKG4gPSAnLCByYV9zdGF0c1tpLCAnbiddLCAnLCBkZW5zaXR5ID0nLCByYV9zdGF0c1tpLCAnZGVuc2l0eV9pbnQnXSAlPiUgcm91bmQoMiksICcpJyApLCAKICAgICAgICAgICAgICAoaSoxMC05KSwgIChpKjEwKSwgbGFiZWxfcm93X2NzcyA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2OyBjb2xvcjogI2ZmZjsiKSAKICB9CgpyYV9zdW0gJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCiMjIERldmVsb3BtZW50CgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQpNX2JpYiAlPiUKICBsZWZ0X2pvaW4oTSAlPiUgc2VsZWN0KFhYLCBQWSksIGJ5ID0gJ1hYJykgJT4lCiAgbXV0YXRlKFBZID0gUFkgJT4lIGFzLm51bWVyaWMoKSkgJT4lCiAgZ3JvdXBfYnkoY29tX25hbWUsIFBZKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JSBtdXRhdGUobl9QWSA9IHN1bShuKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUobl9yZWwgPSBuIC8gbl9QWSkgJT4lCiAgc2VsZWN0KGNvbV9uYW1lLCBQWSwgbiwgbl9yZWwpICU+JQogIGFycmFuZ2UoY29tX25hbWUsIFBZKSAlPiUgCiAgY29tcGxldGUoY29tX25hbWUsIFBZLCBmaWxsID0gbGlzdChuID0gMCwgbl9yZWwgPSAwKSkgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gbiwgeTIgPSBuX3JlbCwgdCA9IFBZLCB0X21pbiA9IFBZX21pbiwgdF9tYXggPSBQWV9tYXgsIGJ5ID0gY29tX25hbWUsIGxhYmVsID0gVFJVRSwgcGFsID0gcGFsX3JhLAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIk51bWJlciBwdWJsaWNhdGlvbnMgYW5udWFsbHkiLCB5Ml90ZXh0ID0gIlNoYXJlIG9mIHB1YmxpY2F0aW9ucyBhbm51YWxseSIpICsKICBwbG90X2Fubm90YXRpb24odGl0bGUgPSBwYXN0ZSgnUmVzZWFyY2ggQXJlYXM6JywgdmFyX2luc3QsICdEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIyBDb25uZWN0aXZpdHkgYmV0d2VlbiB0aGUgcmVzZWFyY2ggYXJlYXMKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpnX2FnZyA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9nX2JpYl9hZ2dfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlTj4lCiAgYXJyYW5nZShjb20pICMgJT4lCiMgICBtdXRhdGUobmFtZSA9IG5hbWVzX3JhICU+JSBwdWxsKGNvbV9yYV9uYW1lKSwKIyAgICAgICAgICBjb2xvciA9IGNvbHNfcmEpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9IDcuNSwgZmlnLndpZHRoPTcuNX0KZ19hZ2cgJUU+JSAKICBmaWx0ZXIod2VpZ2h0ID4gMCAmIGZyb20gIT0gdG8pICU+JQogIGZpbHRlcih3ZWlnaHQgPj0gcXVhbnRpbGUod2VpZ2h0LCAwLjI1KSApICAlTj4lCiAgbXV0YXRlKGNvbSA9IGNvbSAlPiUgZmFjdG9yKCkpICU+JQogIGdncmFwaChsYXlvdXQgPSAiY2lyY2xlIikgKyAKICBnZW9tX2VkZ2VfZmFuKHN0cmVuZ2h0ID0gMC4wNzUsIGFlcyh3aWR0aCA9IHdlaWdodCksIGFscGhhID0gMC4yKSAgKyAKICBnZW9tX25vZGVfcG9pbnQoYWVzKHNpemUgPSBOLCBjb2xvciA9IGNvbSkpICArIAogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IGNvbSksIHJlcGVsID0gVFJVRSkgKwogIHRoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gcGFsX3JhKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhIENvbm5lY3Rpdml0eTonLCB2YXJfaW5zdCwgJ0RlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdOb2RlcyA9IElkZW50aWZpZWQgUmVzZWFyY2ggQXJlYXM7IEVkZ2VzOiBCaWJsaW9ncmFwaGljIGNvdXBsaW5nIHN0cmVuZ2h0IChKQWNjYXJkIHdlaWdodGVkKScpCmBgYAoKIyMgVGVjaG5pY2FsIGRlc2NyaXB0aW9uCkluIGEgYmlibGlvZ3JhcGhpYyBjb3VwbGluZyBuZXR3b3JrLCB0aGUgKipjb3VwbGluZy1zdHJlbmd0aCoqIGJldHdlZW4gcHVibGljYXRpb25zIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBjb21tb25seSBjaXRlZCByZWZlcmVuY2VzIHRoZXkgc2hhcmUsIGFzc3VtaW5nIGEgY29tbW9uIHBvb2wgb2YgcmVmZXJlbmNlcyB0byBpbmRpY2F0ZSBzaW1pbGFyaXR5IGluIGNvbnRleHQsIG1ldGhvZHMsIG9yIHRoZW9yeS4gRm9ybWFsbHksIHRoZSBzdHJlbmd0aCBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBwdWJsaWNhdGlvbiBwYWlyICRpJCBhbmQgJGokICgkc197aSxqfV57YmlifSQpIGlzIGV4cHJlc3NlZCBieSB0aGUgbnVtYmVyIG9mIGNvbW1vbmx5IGNpdGVkIHJlZmVyZW5jZXMuIAoKJCRzX3tpLGp9XntiaWJ9ID0gXHN1bV9tIGNfe2ksbX0gY197aixtfSQkCgpTaW5jZSBvdXIgY29ycHVzIGNvbnRhaW5zIHB1YmxpY2F0aW9ucyB3aGljaCBkaWZmZXIgc3Ryb25nbHkgaW4gdGVybXMgb2YgdGhlIG51bWJlciBvZiBjaXRlZCByZWZlcmVuY2VzLCB3ZSBub3JtYWxpemUgdGhlIGNvdXBsaW5nIHN0cmVuZ3RoIGJ5IHRoZSBKYWNjYXJkIHNpbWlsYXJpdHkgY29lZmZpY2llbnQuIEhlcmUsIHdlIHdlaWdodCB0aGUgaW50ZXJjZXB0IG9mIHR3byBwdWJsaWNhdGlvbnMnIGJpYmxpb2dyYXBoeSAoc2hhcmVkIHJlZmVlbmNlcykgYnkgdGhlaXIgdW5pb24gKG51bWJlciBvZiBhbGwgcmVmZXJlbmNlcyBjaXRlZCBieSBlaXRoZXIgJGkkIG9yICRqJCkuIEl0IGlzIGJvdW5kZWQgYmV0d2VlbiB6ZXJvIGFuZCBvbmUsIHdoZXJlIG9uZSBpbmRpY2F0ZXMgdGhlIHR3byBwdWJsaWNhdGlvbnMgdG8gaGF2ZSBhbiBpZGVudGljYWwgYmlibGlvZ3JhcGh5LCBhbmQgemVybyB0aGF0IHRoZXkgZG8gbm90IHNoYXJlIGFueSBjaXRlZCByZWZlcmVuY2UuIFRoZXJlYnksIHdlIHByZXZlbnQgcHVibGljYXRpb25zIGZyb20gaGF2aW5nIGhpZ2ggY291cGxpbmcgc3RyZW5ndGggZHVlIHRvIGEgbGFyZ2UgYmlibGlvZ3JhcGh5IChlLmcuLCBsaXRlcmF0dXJlIHN1cnZleXMpLgoKJCRTX3tpLGp9XntqYWMtYmlifSA9XGZyYWN7QyhpIFxjYXAgail9e0MoaSBcY3VwIGopfSA9IFxmcmFje3Nfe2ksan1ee2JpYn19e2NfaSArIGNfaiAtIHNfe2ksan1ee2JpYn19JCQKCk1vcmUgcmVjZW50IGFydGljbGVzIGhhdmUgYSBoaWdoZXIgcG9vbCBvZiBwb3NzaWJsZSByZWZlcmVuY2VzIHRvIGNvLWNpdGUgdG8sIGhlbmNlIHRoZXkgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGNvdXBsZWQuIENvbnNlcXVlbnRseSwgYmlibGlvZ3JhcGhpYyBjb3VwbGluZyByZXByZXNlbnRzIGEgZm9yd2FyZCBsb29raW5nIG1lYXN1cmUsIGFuZCB0aGUgbWV0aG9kIG9mIGNob2ljZSB0byBpZGVudGlmeSB0aGUgY3VycmVudCBrbm93bGVkZ2UgZnJvbnRpZXIgYXQgdGhlIHBvaW50IG9mIGFuYWx5c2lzLgoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBLbm93bGVkZ2UgQmFzZXMsIFJlc2VhcmNoIEFyZWFzICYgVG9waWNzIEludGVyYWN0aW9uCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBOb2RlcwpubF8zbSA8LSBjb21fbmFtZXNfYmliICU+JQogIGJpbmRfcm93cyhjb21fbmFtZXNfY2l0KSAlPiUKICBiaW5kX3Jvd3MoY29tX25hbWVzX3RvcCkgJT4lCiAgcmVuYW1lKG5hbWUgPSBjb21fbmFtZSwKICAgICAgICAgY29tX25yID0gY29tKSAlPiUKICByZWxvY2F0ZShuYW1lKQoKIyBFZGdlcwplbF8ybV9rYiA8LSBlbF8ybSAlPiUKICBzZWxlY3QoLWZyb20sIC10bykgJT4lCiAgaW5uZXJfam9pbihjb21fbmFtZXNfY2l0ICU+JSBzZWxlY3QoY29tLCBjb21fbmFtZSksIGJ5ID0gYygnY29tX2NpdCcgPSAnY29tJykpICU+JQogIGlubmVyX2pvaW4oY29tX25hbWVzX2JpYiAlPiUgc2VsZWN0KGNvbSwgY29tX25hbWUsIGNvbCksIGJ5ID0gYygnY29tX2JpYicgPSAnY29tJykpICU+JQogIG11dGF0ZSh3ZWlnaHQgPSAxKSAlPiUKICByZW5hbWUoZnJvbSA9IGNvbV9uYW1lLngsCiAgICAgICAgIHRvID0gY29tX25hbWUueSkgJT4lICMgZ2VuZXJpYwogIHNlbGVjdChmcm9tLCB0bywgd2VpZ2h0LCBjb2wpICU+JSAKICBkcm9wX25hKCkgJT4lIAogIGNvdW50KGZyb20sIHRvLCBjb2wsIHd0ID0gd2VpZ2h0LCBuYW1lID0gJ3dlaWdodCcpICU+JQogIGZpbHRlcihwZXJjZW50X3Jhbmsod2VpZ2h0KSA+PSAwLjI1KSAlPiUKICB3ZWlnaHRfamFjY2FyZChpID0gZnJvbSwgaiA9IHRvLCB3ID0gd2VpZ2h0KSAlPiUgCiAgc2VsZWN0KC13ZWlnaHQpCgplbF8ybV90b3BpYyA8LSB0ZXh0X2xkYV9nYW1tYSAlPiUgc2VsZWN0KC10b3BpYywgLWNvbCkgJT4lCiAgbGVmdF9qb2luKE1fYmliICU+JSBzZWxlY3QoWFgsIGNvbSkgJT4lIGRyb3BfbmEoY29tKSwgYnkgPSBjKCdkb2N1bWVudCcgPSAnWFgnKSkgJT4lCiAgaW5uZXJfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBjb21fbmFtZSwgY29sKSwgYnkgPSBjKCdjb20nID0gJ2NvbScpKSAlPiUKICByZW5hbWUoZnJvbSA9IGNvbV9uYW1lLnksCiAgICAgICAgIHRvID0gY29tX25hbWUueCwKICAgICAgICAgd2VpZ2h0ID0gZ2FtbWEpICU+JSAjIGdlbmVyaWMKICBzZWxlY3QoZnJvbSwgdG8sIHdlaWdodCwgY29sKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBjb3VudChmcm9tLCB0bywgY29sLCB3dCA9IHdlaWdodCwgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC4yNSkgJT4lCiAgd2VpZ2h0X2phY2NhcmQoaSA9IGZyb20sIGogPSB0bywgdyA9IHdlaWdodCkgJT4lIHNlbGVjdCgtd2VpZ2h0KQoKIyBncmFwaApnXzNtIDwtIGVsXzJtX2tiICU+JSAKICBiaW5kX3Jvd3MoZWxfMm1fdG9waWMpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IFRSVUUpICVOPiUKICBsZWZ0X2pvaW4obmxfM20sIGJ5ID0gJ25hbWUnKSAlPiUKICBtdXRhdGUoCiAgICBsZXZlbCA9IGNhc2Vfd2hlbigKICAgICAgdHlwZSA9PSAiS0IiIH4gMSwKICAgICAgdHlwZSA9PSAiUkEiIH4gMiwKICAgICAgdHlwZSA9PSAiVFAiIH4gMyksCiAgICBjb29yZF95ID0gMC4xLAogICAgY29vcmRfeCA9IDAuMDAxICsgMS8obWF4KGxldmVsKS0xKSAqIChsZXZlbC0xKQogICAgKSAgJU4+JQogIGZpbHRlcighbm9kZV9pc19pc29sYXRlZCgpLCAhaXMubmEobGV2ZWwpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIyBCdWlsZCBzYW5rZXkgcGxvdApmaWcgPC0gcGxvdF9seSh0eXBlID0gInNhbmtleSIsIAogICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJoIiwKICAgICAgICAgICAgICAgYXJyYW5nZW1lbnQgPSAic25hcCIsCiAgbm9kZSA9IGxpc3QoCiAgICBsYWJlbCA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChuYW1lKSwKICAgIHggPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29vcmRfeCksCiAgICB5ID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvb3JkX3kpLAogICAgY29sb3IgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29sKSwgCiAgICBwYWQgPSA0CiAgKSwgCiAgbGluayA9IGxpc3QoCiAgICBzb3VyY2UgPSAoZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGZyb20pKSAtMSwKICAgIHRhcmdldCA9IChnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwodG8pKSAtMSwKICAgIHZhbHVlID0gIGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbCh3ZWlnaHRfamFjKSwKICAgIGNvbG9yID0gZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvbCkgJT4lIGNvbDJyZ2IoKSAlPiUgYXMubWF0cml4KCkgJT4lIHQoKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogICAgICBtdXRhdGUoY29sX3JnYiA9IHBhc3RlMCgncmdiYSgnLCByZWQsICcsJyAsIGdyZWVuLCAnLCcsIGJsdWUsICcsMC43NSknKSkgJT4lICBwdWxsKGNvbF9yZ2IpCiAgICApCikgJT4lIAogIGxheW91dCh0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQmFzZXMsIFJlc2VhcmNoIEFyZWFzICYgVG9waWNzOicsIHZhcl9pbnN0LCAnRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgbWFyZ2luID0gbGlzdChsID0gNTAsIHIgPSA1MCwgYiA9IDEwMCwgdCA9IDEwMCwgcGFkID0gMikpIApgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PSAxMCwgZmlnLndpZHRoPTEyLjV9CmZpZwpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCiMgRW5kbm90ZXMKCkFsbCByZXN1bHRzIGFyZSBwcmVsaW1pbmFyeSBzbyBmYXIuLi4KCmBgYHtyfQojIEFmdGVyIGtuaXR0ZWQgZG8gdGhpcwojZmlsZS5yZW5hbWUoZnJvbSA9ICI5Ml9kZXNjcmlwdGl2ZXNfbWFwcGluZy5uYi5odG1sIiwgdG8gPSBwYXN0ZTAoJy4uL291dHB1dC9maWVsZF9tYXBwaW5nL2ZpZWxkX21hcHBpbmdfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLmh0bWwnKSkKYGBgCgoKCgo=